// infer 的时候加上 extends 来约束推导的类型，这样推导出的就不再是 unknown 了，而是约束的类型。
type NumInfer<Str> = Str extends `${infer Num extends number}` ? Num : never

type test1 = NumInfer<'123a'>

type StrToNum<Str> = Str extends `${infer Num extends number}` ? Num : Str
enum Code {
    a = 111,
    b = 222,
    c = 'abc',
}
type test3 = `${Code}`
type test2 = StrToNum<`${Code}`>